home *** CD-ROM | disk | FTP | other *** search
-
- #include "defines.h"
- #include "includes.h"
- #include "funcs.h"
-
- int main(argc, argv, envp)
- int argc;
- char **argv[];
- char **envp[];
- {
- extern char **environ;
-
- sockopt=1 ;
- sockoptlen=sizeof(sockopt);
- usepasswd=0 ;
- titlequery=0 ;
- envpsize=0 ;
- pssize=0 ;
- argy=0 ;
- useclient=0 ;
- i=0 ;
- qq=0 ;
- bl=0;
- scramble=0 ;
- quit=0 ;
- todo=0 ;
- dirhasbeenloaded=0 ;
- playerselected=0 ;
-
- first=NULL ;
- last=NULL ;
- curr=NULL ;
- count=0 ;
- port=PORT ;
- counterpid=0 ;
- futabapid=0 ;
- playerpid=0 ;
- socketpid=0 ;
- pidstatus=0 ;
- daemonize=0 ;
- daemonstat=0 ;
- usefutaba=0 ;
- usesocket=1 ;
- playertouse=0 ;
- clockout=calloc(1,256);
- otestfn=calloc(1,256);
- iam=calloc(1,256);
- host=calloc(1,256);
- password=calloc(1,80);
- guess=calloc(1,80);
-
- strcpy(host,DEFAULTHOST);
-
- strcpy(iam,(char *)argv[0]);
-
- memset(&msgcountback[0],0,256);
-
- squig[0]='|';
- squig[1]='/';
- squig[2]='-';
- squig[3]=92;
-
- for (qq=0;qq<=31;++qq)
- actstr[qq]=calloc(1,10);
-
- strcpy(actstr[QUIT],"quit\n");
- strcpy(actstr[PAUSE],"paus\n");
- strcpy(actstr[RESUME],"resu\n");
- strcpy(actstr[PREV],"prev\n");
- strcpy(actstr[NEXT],"next\n");
- strcpy(actstr[REPEAT],"repe\n");
- strcpy(actstr[QUERY],"quer\n");
-
- for (qq=0;qq<=5;++qq)
- {
- mp3player[qq].player=calloc(1,80);
- for (x=0;x<=10;++x) mp3player[qq].playerflags[x]=calloc(1,80);
- mp3player[qq].playeroutput=calloc(1,80);
- }
-
- strcpy(mp3player[0].player,"mpg123");
- strcpy(mp3player[0].playerflags[0],"-q");
- strcpy(mp3player[0].playerflags[1],"--aggressive");
- strcpy(mp3player[0].playeroutput,"/dev/null");
-
- strcpy(mp3player[1].player,"mp3blaster");
- strcpy(mp3player[1].playerflags[0],"-r=10");
- strcpy(mp3player[1].playeroutput,"/dev/tty11");
-
- strcpy(mp3player[2].player,"freeamp");
- strcpy(mp3player[2].playerflags[0],"-q");
- strcpy(mp3player[2].playeroutput,"/dev/null");
-
- argstart=(char *)argv[0];
-
- nice(-5);
-
- for (i = 0; envp[i] != NULL; i++)
- envpsize += strlen((char *)envp[i]) + 1;
- environ = (char **) malloc(sizeof (char *) * (i + 1));
- for (i = 0; envp[i] != NULL; i++)
- environ[i] = strcpy((char *)calloc(1,strlen((char *)envp[i]) + 1), (char *)envp[i]);
- environ[i] = NULL;
-
-
- for (qq = 0; qq < argc; qq++)
- {
- if (qq==0 || ((char *)(lastargv + 1) == (char *)argv[qq]))
- {
- lastargv = (char *)argv[qq];
- lastargv = (char *)(lastargv + strlen((char *)argv[qq]));
- }
- else
- continue;
- }
-
- for (qq = 0; envp[qq] != NULL; qq++)
- {
- if (qq==0 || (lastargv+1 == (char *)envp[qq]))
- {
- lastargv = (char *)envp[qq];
- lastargv = lastargv + strlen((char *)envp[qq]);
- }
- else
- continue;
- }
-
- pssize=(int)((long int)lastargv - (long int)argv[0]);
-
- mp3directory=calloc(1,256);
-
- strcpy(mp3directory,MP3DIRECTORY);
- do
- {
- argy = getopt(argc,(char **)argv,"QqpcnbrTdzfm:h?w:i:t:P:");
- switch (argy)
- {
- case 'Q': if (daemonize==0) {
- daemonize=2;
- break;
- } else {
- printf ("Can't specify -d with -Q.\n");
- exit(1);
- }
- /* daemonize=2 doesn't daemonize */
- /* it just keeps it quiet */
- case 'q': todo=QUIT; break;
- case 'p': todo=PAUSE; break;
- case 'c': todo=RESUME; break;
- case 'n': todo=NEXT; break;
- case 'b': todo=PREV; break;
- case 'r': todo=REPEAT; break;
- case 'T': todo=QUERY; break;
- case 'd': if (daemonize==0) {
- daemonize=1;
- break;
- } else {
- printf ("Can't specify -d with -Q.\n");
- exit(1);
- }
- case 'z': scramble=1; break; /* no repeats */
- case 'f': usefutaba=1; break;
- case 'm': playertouse=atoi(optarg);
- break;
- case 'h': help(); exit(0);
- case '?': help(); exit(0);
- case 'w': strcpy(mp3directory,optarg); break;
- case 'i': strcpy(host,optarg);useclient=1; break;
- case 't': port=atoi(optarg); break;
- case 'P': strcpy(password,optarg);usepasswd=1; break;
-
- default: ;
- }
- } while (argy != EOF);
-
- memset(argv[0],0,pssize);
- if (usesocket==1)
- sprintf((char *)argv[0],(char *)"Jooky! ver. %s (c) 1999 by Dentar, Inc. (listening on port %d)",VERSION,port);
- else
- sprintf((char *)argv[0],(char *)"Jooky! ver. %s (c) 1999 by Dentar, Inc.",VERSION);
-
- if (findplayers()==(char *)NULL) exit (1);
-
- if (todo != 0)
- {
- jookyclient(host,actstr[todo]);
- }
-
- if (daemonize==1)
- {
- daemonstat=fork();
- if (daemonstat>0)
- {
- printf ("Daemonized!\n");
- exit(0);
- }
-
- if (daemonstat<0)
- {
- printf ("Can't daemonize!\n");
- exit(-1);
- }
-
- if (daemonstat==0)
- {
- memset(argv[0],0,pssize);
- if (usesocket==0)
- sprintf((char *)argv[0],(char *)"Jookyd! ver. %s (c) 1999 by Dentar, Inc.",VERSION);
- else
- sprintf((char *)argv[0],(char *)"Jookyd! ver. %s (c) 1999 by Dentar, Inc. (listening on port %d)",VERSION,port);
- argv[1]=NULL;
- }
- }
-
- if (createlockfile()!=0)
- {
- fprintf(stdout,"Already running!\n");
- exit(-1);
- }
-
- if (loaddir()!=0) exit (-1);
-
- setuphandlers();
-
- if (daemonize==0)
- {
- initscr();
- halfdelay(1);
- noecho();
- oldcurs=curs_set(0);
- }
- else
- {
- freopen("/dev/null","a+",stdin);
- freopen("/dev/null","a+",stdout);
- freopen("/dev/null","a+",stderr);
- }
-
-
- if (usesocket==1)
- {
- fd=socket(AF_INET,SOCK_STREAM,0);
-
- sokitin.sin_family = AF_INET;
- sokitin.sin_port = htons(port);
- sokitin.sin_addr.s_addr=INADDR_ANY;
- memset(&sokitin.sin_zero,0,8);
-
- if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char *)&sockopt,sockoptlen)!=0) {
- jookyerr=fopen("/tmp/jooky.err","w+");
- fprintf(jookyerr,"setsockopt: %s\n",strerror(errno));
- fclose(jookyerr);
- removelockfile();
- exit(errno);
- }
-
- if (bind(fd,(struct sockaddr *)&sokitin,sizeof(struct sockaddr)) == -1)
- {
- jookyerr=fopen("/tmp/jooky.err","w+");
- fprintf(jookyerr,"bind: %s\n",strerror(errno));
- fclose(jookyerr);
- fprintf(stderr,"bind: %s\n",strerror(errno));
- usesocket=0;
- removelockfile();
- exit(errno);
- }
-
- if (listen(fd,bl)==-1)
- {
- jookyerr=fopen("/tmp/jooky.err","w+");
- fprintf(jookyerr,"listen: %s\n",strerror(errno));
- fclose(jookyerr);
- usesocket=0;
- }
- }
-
- if (usesocket==1) fcntl(fd,F_SETFL,O_NONBLOCK);
-
- for (;;) /* do this til the end of time */
- {
- curr=curr->next ;
- if (daemonize==0)
- {
- move(DIRLINE,0);
- clrtoeol();
- mvaddnstr(DIRLINE,\
- (strlen(mp3directory) < COLS) ? \
- (COLS-strlen(mp3directory))/2 : 0 ,\
- mp3directory,COLS);
- move(TITLELINE,0);
- clrtoeol();
- mvaddnstr(TITLELINE,\
- (strlen(curr->fname) < COLS) ? \
- (COLS-strlen(curr->fname))/2 : 0 ,\
- curr->fname,COLS);
- move(LINES-1,0);
- clrtoeol();
- standout();
- mvprintw(LINES-2,(COLS/2)-(strlen(HEP)/2),HEP);
- mvprintw(LINES-1,(COLS/2)-(strlen(HEP2)/2),HEP2);
- standend();
- dument=curr;
- for (qq=(LINES-STATUSLINE-4)/2;qq>0;--qq) dument=dument->prev;
- for (qq=STATUSLINE+1;qq<=LINES-4;++qq)
- {
- move(qq,0);
- clrtoeol();
- if (dument==curr)
- {
- standout();
- mvaddnstr(qq,\
- (strlen(dument->fname) < COLS) ? \
- (COLS-strlen(dument->fname))/2 : 0 ,\
- dument->fname,COLS);
- standend();
- } else
- mvaddnstr(qq,\
- (strlen(dument->fname) < COLS) ? \
- (COLS-strlen(dument->fname))/2 : 0 ,\
- dument->fname,COLS);
-
- dument=dument->next;
- }
- refresh();
- }
- memset(otestfn,0,256);
- strcat(otestfn,mp3directory);
- strcat(otestfn,"/");
- strcat(otestfn,curr->fname);
- if ((otest=fopen(otestfn,"r"))!=(FILE *)NULL)
- {
- fclose(otest);
-
- playerpid=fork();
- if (playerpid==0)
- {
- memset(argv[0],0,pssize);
- sprintf((char *)argv[0],"jookyplayerd [%s] [%s]",mp3directory,curr->fname);
- argv[1]=NULL;
- startplayer(mp3directory,curr->fname);
- removelockfile();
- exit(0);
- } else if (playerpid < 0)
- {
- perror ("Fork player in main failed");
- removelockfile();
- exit(-1);
- } else if (playerpid > 0)
- {
- if (counterpid!=0) kill(counterpid,SIGKILL);
- if (futabapid!=0) kill(futabapid,SIGKILL);
-
- if (daemonize==0)
- {
- if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets)<0)
- {
- perror ("Socketpair:");
- removelockfile();
- close(sockets[0]);
- close(sockets[1]);
- exit(1);
- } else
- fcntl(sockets[0],F_SETFL,O_NONBLOCK);
- counterpid=fork();
- if (counterpid==0)
- {
- memset(argv[0],0,pssize);
- sprintf((char *)argv[0],"counterd [%d]",mp3hed(mp3directory,curr->fname));
- /* strcpy((char *)argv[0],"counterd"); */
- argv[1]=NULL;
- argc=0;
- revcounter(mp3hed(mp3directory,curr->fname));
- exit(0);
- };
- };
-
- if (usefutaba==1)
- {
- futabapid=fork();
- if (futabapid==0)
- {
- memset(argv[0],0,pssize);
- sprintf((char *)argv[0],"futabad [%s] [%d]",curr->fname,mp3hed(mp3directory,curr->fname));
- argv[1]=NULL;
- futaba(curr->fname,mp3hed(mp3directory,curr->fname));
- exit(0);
- }
- }
-
- while (waitpid(playerpid,&pidstatus,WNOHANG)==0)
- {
- if (daemonize==0)
- {
- if (read(sockets[0],clockout,1024)!=-1)
- {
- move(TIMELINE,0);
- clrtoeol();
- mvaddstr(TIMELINE,(COLS-strlen(clockout))/2,clockout);
- memset(clockout,0,256);
- }
- key=getch();
- squiggly();
- if (key=='p') pauseplay();
- if (key=='c') resumeplay();
- if (key=='r') skipbackward();
- if ((key=='n')||(key=='j')) skipforward();
- if ((key=='N')||(key=='J'))
- {
- for (qq=1;qq<((LINES-STATUSLINE-5)/2);++qq)
- {
- curr=curr->next;
- }
- skipforward();
- }
- if ((key=='b')||(key=='k'))
- {
- skipbackward();
- skipbackward();
- }
- if ((key=='B')||(key=='K'))
- {
- for (qq=0;qq<((LINES-STATUSLINE-2)/2);++qq)
- skipbackward();
- }
- if (key=='q') removelockfile();
- for (qq=9;qq>=0;--qq)
- {
- if (msgcountback[qq]==1)
- {
- move(qq,0);
- clrtoeol();
- refresh();
- }
- if (msgcountback[qq]>0) --msgcountback[qq];
- /* mvprintw(qq+9,0,"%d",msgcountback[qq]); */
- }
- refresh();
- } else sleep(1);
- if (usesocket==1)
- jookysock(mp3directory,curr->fname);
- }
- if ((daemonize==0)&&(usefutaba==0))
- {
- close(sockets[0]);
- close(sockets[1]);
- }
- playerpid=0;
- }
- } else
- {
- mvprintw(STATUSLINE,0,"Can't open %s!",curr->fname);
- clrtoeol();
- refresh();
- usleep(300000);
- if (getch()=='q')
- removelockfile();
- }
- }
- }
-